package cn.itcast.web.controller.cargo;


import cn.itcast.domain.cargo.*;
import cn.itcast.service.cargo.ContractService;
import cn.itcast.service.cargo.ExportProductService;
import cn.itcast.service.cargo.ExportService;
import cn.itcast.web.controller.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Controller
@RequestMapping("/cargo/export")
public class ExportController extends BaseController {


    @Reference
    private ContractService contractService;

    @Reference
    private ExportService exportService;

    @Reference
    private ExportProductService exportProductService;

    /*
         作用 ： 进入购销合同的管理页面，显示状态为1的购销合同
         url :  /cargo/export/contractList.do
        参数 : 没有
        返回值 :export-contractList
     */

    @RequestMapping("/contractList")
    public String contractList(@RequestParam(defaultValue = "1") Integer pageNum,
                       @RequestParam(defaultValue = "5") Integer pageSize) {

        ContractExample contractExample = new ContractExample();

        //根据排序
        contractExample.setOrderByClause("create_time desc");
        //本公司的购销合同并且是状态为1

        contractExample.createCriteria().andCompanyIdEqualTo(getLoginUserCompanyId()).andStateEqualTo(1);
        PageInfo<Contract> pageInfo = contractService.findByPage(contractExample, pageNum, pageSize);


        //存储到域中
        request.setAttribute("pageInfo", pageInfo);
        return "cargo/export/export-contractList";


    }

    /*
    作用 ： 进入报运单列表
    url :  /cargo/export/list.do
   参数 : 没有
   返回值 :export-list
*/

    @RequestMapping("/list")
    public String list(@RequestParam(defaultValue = "1") Integer pageNum,
                               @RequestParam(defaultValue = "5") Integer pageSize) {

        ExportExample cxportExample = new ExportExample();

        //根据排序
        cxportExample.setOrderByClause("create_time desc");
        //本公司的购销合同并且是状态为1

        cxportExample.createCriteria().andCompanyIdEqualTo(getLoginUserCompanyId());
        PageInfo<Export> pageInfo = exportService.findByPage(cxportExample, pageNum, pageSize);


        //存储到域中
        request.setAttribute("pageInfo", pageInfo);
        return "cargo/export/export-list";


    }
  /*
        作用 ： 进入生成报运单页面
        url :  /cargo/export/toExport.do
       参数 : 多个购销合同的id
                同一个参数名有多个值的时候解决方案：
                        1. 使用数组接收 String[] id
                        2. 使用字符串接收  String id.  id的值=1,2
       返回值 :export-toExport.jsp
    */

    @RequestMapping("/toExport")
    public String toExport(String id) {

        //把购销合同的id存储到域中
        request.setAttribute("id", id);
        return "cargo/export/export-toExport";

    }
    /*
       作用：添加报运单
       url:  /export/edit.do
       参数：Export 报运单对象信息
       返回值 : 报运单列表页面
    */

        @RequestMapping("/edit")
        public String edit(Export export){
            //报运单的创建人
            export.setCreateBy(getLoginUser().getId());

            //报运单的创建人所属的部门

            export.setCreateDept(getLoginUser().getDeptId());

            //报运单的创建人所属的企业id

            export.setCompanyId(getLoginUserCompanyId());

            //报运单的创建人所属的企业名称

            export.setCompanyName(getLoginUserCompanyName());


            if (StringUtils.isEmpty(export.getId())){


                //添加
                exportService.save(export);
            }else{
                //更新
                exportService.update(export);
            }

            return "redirect:/cargo/export/list.do";  //访问上面的list方法


        }
    /*
     作用：进入修改报运单的页面
     url:  /cargo/export/toUpdate.do?id=5598f9cc-6bd7-4a02-890e-da31f3de8ba1
     参数：报运的id
     返回值 : export-update.jsp
  */
        @RequestMapping("/toUpdate")
         public String toUpdate(String id){

            Export export = exportService.findById(id);

            //1.存储到域中

            request.setAttribute("export",export);

            //2. 查询报运商品的数据
            ExportProductExample exportProductExample = new ExportProductExample();
            exportProductExample.createCriteria().andExportIdEqualTo(id);
            List<ExportProduct> exportProductList = exportProductService.findAll(exportProductExample);

            request.setAttribute("eps",exportProductList);

            return "cargo/export/export-update";


        }




    }

























